package com.ssm.yin.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

/**
 * @Package: cn.com.yin.util
 * @ClassName: JedisComboPool
 * @Author: Yin
 * @Date: 16:36
 * @Description: jedis 的连接池。
 */
public class JedisComboPool {

    private static final JedisPool jedisPool ;

    /**
     * 连接池初始化
     */
    static {
        Properties prop = new Properties();
        InputStream in = JedisComboPool.class.getClassLoader().getResourceAsStream("jedis-config.properties");
        try {
            // 读取配置文件
            prop.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 设置最大连接
        poolConfig.setMaxTotal(Integer.parseInt(prop.getProperty("jedis.maxConnect")));
        // 设置最大空闲连接
        poolConfig.setMaxIdle(Integer.parseInt(prop.getProperty("jedis.maxIdle")));
        // 设置最小空闲连接
        poolConfig.setMinIdle(Integer.parseInt(prop.getProperty("jedis.minIdle")));
        // 设置最长等待时间，ms（毫秒）
        poolConfig.setMaxWaitMillis(Integer.parseInt(prop.getProperty("jedis.maxConnect")));
        jedisPool = new JedisPool(poolConfig, prop.getProperty("jedis.host"),Integer.parseInt(prop.getProperty("jedis.port")));
    }

    /**
     * 从连接池里面 获取jedis实例
     * @return Jedis实例对象
     */
    public static Jedis getJedis(){
        Jedis jedis = jedisPool.getResource();
        return jedis;
    }

    /**
     * 将jedis连接实例释放【归还自连接池里，方便下次获取】
     * @param jedis
     */
    public static void close(Jedis jedis){
        jedisPool.returnResource(jedis);
    }
}
